import random

# 1. 构造学生字典
#创建一个空字典，用于存储学生的姓名和分数。
students = {}
#通过循环迭代15次，每次循环生成一个学生的姓名和分数。
for i in range(15):
    #生成学生姓名
    name = chr(ord('A') + i)
    #使用random.randint()函数随机35-100的生成分数
    score = random.randint(35, 100)
    #将学生的姓名作为键，分数作为值，添加到学生字典students中。
    students[name] = score
print("学生字典:", students)

# 2. 按照学生成绩降序排列输出字典
#使用sorted()函数对学生字典students的项进行排序，
#students.items()将返回一个包含学生字典中所有键值对的可迭代对象。
#item[1]表示取每个键值对中的值及分数，作为排序的依据。
# reverse=True表示按照降序进行排序。False是升序
sorted_students = dict(sorted(students.items(), key=lambda item: item[1], reverse=True))
print("按照学生成绩降序排列的字典:", sorted_students)

# 3. 计算平均分、最大值、最小值
#values()获取所有的成绩，并将其存储在名为 scores 的列表中。
scores = students.values()
average = sum(scores) / len(scores)
maximum = max(scores)
minimum = min(scores)
print("平均分: {:^7.2f}".format(average))
print("最大值: {:^7.2f}".format(maximum))
print("最小值: {:^7.2f}".format(minimum))

# 4. 统计不及格人数
#列表推导式 (1 for score in scores if score < 60)，它遍历了 scores 列表中的每个分数，并返回一个由1组成的新列表，
# 其中新列表只包含低于60分的分数。
fail_count = sum(1 for score in scores if score < 60)
print("不及格人数:", fail_count)

# 5. 输入学生名字并输出对应分数和水平
while True:
    name = input("请输入学生名字（A到O之间的大写字母）：")
    #如果输入的学生名字在 students 字典中存在
    if name in students:
        #从字典 students 中获取特定学生的分数，并将其赋值给变量 score。
        score = students[name]
        #{1}==name,{2}==score
        print("学生{}的分数是: {}".format(name, score))
        if score > average:
            print("该生成绩属于上等水平")
        elif score == average:
            print("该生成绩属于中等水平")
        #如果成绩不是上等和中等水平，就是if和elif都是假的
        else:
            print("该生成绩属于下等水平")
    else:
        print("请输入正确的学生名字")
    choice = input("是否继续循环？（输入 'y' 继续，输入 'n' 停止）：")
    if choice.lower() == 'n':
        break